package com.tz.liveplayermodule;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;

import com.tencent.bugly.crashreport.CrashReport;
import com.tz.liveplayermodule.greendao.db.GreenDaoManager;
import com.uzmap.pkg.uzcore.UZWebView;
import com.uzmap.pkg.uzcore.uzmodule.UZModule;
import com.uzmap.pkg.uzcore.uzmodule.UZModuleContext;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * 该类映射至Javascript中moduleDemo对象<br><br>
 * <strong>Js Example:</strong><br>
 * var module = api.require('moduleDemo');<br>
 * module.xxx();
 *
 * @author APICloud
 */
public class LiveCloud extends UZModule {
    //文档地址
    //https://docs.qq.com/doc/DY0dWbVJldm9wanpo
    static final int ACTIVITY_REQUEST_CODE_A = 100;
    private UZModuleContext mJsCallback;

    public LiveCloud(UZWebView webView) {
        super(webView);
    }

    // APP_ID 替换为你的应用从官方网站申请到的合法appID
    private static final String APP_ID = "wx86c4a72d01af74a0";

    // IWXAPI 是第三方app和微信通信的openApi接口
//    private static IWXAPI api;

//    private void regToWx() {
//         通过WXAPIFactory工厂，获取IWXAPI的实例
//        api = WXAPIFactory.createWXAPI(context(), APP_ID, true);
//         将应用的appId注册到微信
//        api.registerApp(APP_ID);
//    }

    /**
     * <strong>函数</strong><br><br>
     * 该函数映射至Javascript中moduleDemo对象的showAlert函数<br><br>
     * <strong>JS Example：</strong><br>
     * moduleDemo.showAlert(argument);
     *
     * @param moduleContext (Required)
     */
    //观看历史
    @SuppressLint("WrongConstant")
    public void jsmethod_openHistory(final UZModuleContext moduleContext) {
        Intent intent = new Intent(context(), HistoryVideoActivity.class);
        intent.putExtra("token", moduleContext.optString("token"));
        intent.putExtra("app", moduleContext.optString("app"));
        intent.putExtra("major_type", moduleContext.optString("major_type"));
        intent.putExtra("urlTitle", moduleContext.optString("urlTitle"));
        intent.putExtra("username", moduleContext.optString("username"));
        startActivity(intent);
    }

    //离线缓存
    @SuppressLint("WrongConstant")
    public void jsmethod_openDownload(final UZModuleContext moduleContext) {
        Intent intent = new Intent(context(), LocalVideoActivity.class);
        startActivity(intent);
    }

    public void jsmethod_enterRoom(final UZModuleContext moduleContext) {
        //报错日志
        CrashReport.initCrashReport(context(), "fbd43b6909", true);
//        MyExceptionHandler.create(context());
        GreenDaoManager.getInstance(context());

//        regToWx();

//        lpUserType:0,
//                userName:"闻有刀",
//                userAvatar:"https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83epIvRuxVibiaRCiaMrWYbajnTozQVapPRDMwMlrph2M4xanIrjFl14duubPbfx7DJr5VyvXEY83h6zGw/132",
//                userNumber:"6739",
//                roomId:18120689985704,
//                sign:"d17c2c1c1955cee61c52413e5437c131",
//                userId:"145",

//        intent.putExtra("id", moduleContext.optString("id"));
//        intent.putExtra("lpUserType",  moduleContext.optInt("lpUserType"));
//        intent.putExtra("userName",  moduleContext.optString("userName"));
//        intent.putExtra("userAvatar",  moduleContext.optString("userAvatar"));
//        intent.putExtra("userNumber",  moduleContext.optString("userNumber"));
//        intent.putExtra("roomId", moduleContext.optLong("roomId"));
//        intent.putExtra("sign", moduleContext.optString("sign"));
//        intent.putExtra("userId", moduleContext.optInt("userId"));

        System.out.println("token：" + moduleContext.optString("token"));
        System.out.println("app：" + moduleContext.optString("app"));
        System.out.println("major_type：" + moduleContext.optString("major_type"));
        System.out.println("new：" + moduleContext.optString("new"));
        System.out.println("is_live：" + moduleContext.optString("is_live"));
        System.out.println("item_title：" + moduleContext.optString("item_title"));
        System.out.println("course_id：" + moduleContext.optString("course_id"));
        System.out.println("urlTitle：" + moduleContext.optString("urlTitle"));
        System.out.println("username：" + moduleContext.optString("username"));

        Intent intent = new Intent(context(), LiveRoomNewActivity.class);
//        Intent intent = new Intent(context(), LiveRoomActivity.class);
        intent.putExtra("token", moduleContext.optString("token"));
        intent.putExtra("app", moduleContext.optString("app"));
        intent.putExtra("major_type", moduleContext.optString("major_type"));
        intent.putExtra("new", moduleContext.optInt("new"));
        intent.putExtra("is_live", moduleContext.optString("is_live"));
        intent.putExtra("item_title", moduleContext.optString("item_title"));
        intent.putExtra("course_id", moduleContext.optString("course_id"));
        intent.putExtra("urlTitle", moduleContext.optString("urlTitle"));
        intent.putExtra("username", moduleContext.optString("username"));
        startActivity(intent);

//        LPConstants.LPUserType lpUserType;
//        switch (userType) {
//            case 0:
//                lpUserType = LPConstants.LPUserType.Student;
//                break;
//            case 1:
//                lpUserType = LPConstants.LPUserType.Teacher;
//                break;
//            case 2:
//                lpUserType = LPConstants.LPUserType.Assistant;
//                break;
//            case 3:
//                lpUserType = LPConstants.LPUserType.Visitor;
//                break;
//            default:
//                lpUserType = LPConstants.LPUserType.Visitor;
//                break;
//        }
//
//        LiveSDKWithUI.LiveRoomUserModel model = new LiveSDKWithUI.LiveRoomUserModel(userName, userAvatar, userNumber, lpUserType);
//        LiveSDKWithUI.enterRoom(context(), roomId, sign, model, new LiveSDKWithUI.LiveSDKEnterRoomListener() {
//            @Override
//            public void onError(String s) {
//                Toast.makeText(context(), s, Toast.LENGTH_LONG).show();
//            }
//        });
//
//        setupRoomListeners(context(), lpUserType);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK && requestCode == ACTIVITY_REQUEST_CODE_A) {
            String result = data.getStringExtra("result");
            if (null != result && null != mJsCallback) {
                try {
                    JSONObject ret = new JSONObject(result);
                    mJsCallback.success(ret, true);
                    mJsCallback = null;
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    protected void onClean() {
        if (null != mJsCallback) {
            mJsCallback = null;
        }
    }

//    private static class ShareModel extends LPShareModel {
//        private String shareIconText;
//        private int shareIconRes;
//        private boolean corner;
//        private String cornerText;
//        private int shareType;
//
//        private String title;
//        private String content;
//        private String url;
//        private String imageUrl;
//
//        public void setShareIconText(String shareIconText) {
//            this.shareIconText = shareIconText;
//        }
//
//        public void setShareIconRes(int shareIconRes) {
//            this.shareIconRes = shareIconRes;
//        }
//
//        public void setCornerText(String cornerText) {
//            this.cornerText = cornerText;
//        }
//
//        public void setShareType(int shareType) {
//            this.shareType = shareType;
//        }
//
//        @Override
//        public String getShareIconText() {
//            return shareIconText;
//        }
//
//        @Override
//        public int getShareIconRes() {
//            return shareIconRes;
//        }
//
//        public void setCorner(boolean corner) {
//            this.corner = corner;
//        }
//
//        @Override
//        public boolean hasCorner() {
//            return corner;
//        }
//
//        @Override
//        public String getCornerText() {
//            return cornerText;
//        }
//
//        @Override
//        public int getShareType() {
//            return shareType;
//        }
//
//        public void setTitle(String title) {
//            this.title = title;
//        }
//
//        public void setContent(String content) {
//            this.content = content;
//        }
//
//        public void setUrl(String url) {
//            this.url = url;
//        }
//
//        public void setImageUrl(String imageUrl) {
//            this.imageUrl = imageUrl;
//        }
//
//        public String getTitle() {
//            return null;
//        }
//
//        public String getContent() {
//            return null;
//        }
//
//        public String getUrl() {
//            return null;
//        }
//
//        public String getImageUrl() {
//            return null;
//        }
//    }

//    private static void setupRoomListeners(Context context, LPConstants.LPUserType type) {
//
//        LiveSDKWithUI.setShareListener(new LiveSDKWithUI.LPShareListener() {
//            @Override
//            public void onShareClicked(Context context, int i) {
//                // i 为LPShareModel里getShareType的值
//                System.out.println("ShareType=:" + i);
//                Log.e("ShareType", "ShareType=:" + i);
//                String text = "1234567890";
//                if (i == 1) {
//                    //初始化一个 WXTextObject 对象，填写分享的文本内容
//                    WXTextObject textObj = new WXTextObject();
//                    textObj.text = text;
//
////用 WXTextObject 对象初始化一个 WXMediaMessage 对象
//                    WXMediaMessage msg = new WXMediaMessage();
//                    msg.mediaObject = textObj;
//                    msg.description = text;
//
//                    SendMessageToWX.Req req = new SendMessageToWX.Req();
//                    req.transaction = String.valueOf(System.currentTimeMillis());
//                    req.message = msg;
//                    req.scene = WXSceneSession;
////调用api接口，发送数据到微信
//                    api.sendReq(req);
//                }
//
//                if (i == 2) {
//                    // 初始化一个 WXTextObject 对象
//                    WXTextObject textObj = new WXTextObject();
//                    textObj.text = text;
//// 用 WXTextObject 对象初始化一个 WXMediaMessage 对象
//                    WXMediaMessage msg = new WXMediaMessage(textObj);
//                    msg.description = text;
//// 构造一个Resp
//                    GetMessageFromWX.Resp resp = new GetMessageFromWX.Resp();
//// 将req的transaction设置到resp对象中，其中bundle为微信传递过来的Intent所带的内容，通过getExtras()方法获取
//                    resp.transaction = String.valueOf(System.currentTimeMillis());
////                    resp.transaction = new GetMessageFromWX.Req(bundle).transaction;
//                    resp.message = msg;
////调用api接口，发送数据到微信
//                    api.sendResp(resp);
//                }
//            }
//
//            @Override
//            public ArrayList<? extends LPShareModel> setShareList() {
//                // shareModel请继承LPShareModel
//                // getShareIconRes() 返回分享图标 resource
//                // getShareIconText() 返回分享图标文字 如：微信、朋友圈
//                // hasCorner 默认false
//                ArrayList<ShareModel> shareModels = new ArrayList<>();
//                ShareModel shareModel1 = new ShareModel();
//                shareModel1.setCornerText("123");
//                shareModel1.setShareIconRes(R.drawable.share1);
//                shareModel1.setShareIconText("发送给朋友");
//                shareModel1.setShareType(1);
//                shareModels.add(shareModel1);
//
//                ShareModel shareModel2 = new ShareModel();
//                shareModel2.setCornerText("abc");
//                shareModel2.setShareIconRes(R.drawable.share2);
//                shareModel2.setShareIconText("微信朋友圈");
//                shareModel2.setShareType(2);
//                shareModels.add(shareModel2);
//
//                return shareModels;
//            }
//
//            @Override
//            public void getShareData(Context context, long roomId) {
//                // 触发集成方异步获取分享信息
//                System.out.println("roomId==:" + roomId);
//            }
//        });
//        LiveSDKWithUI.setEnterRoomConflictListener(new LiveSDKWithUI.RoomEnterConflictListener() {
//            @Override
//            public void onConflict(Context context, LPConstants.LPEndType endType, final LiveSDKWithUI.LPRoomExitCallback callback) {
//                // 单点登录冲突 endType为冲突方终端类型
//                // 回调callback.exit(); 退出直播间
//                /*
//                new MaterialDialog.Builder(context)
//                        .content("您的账号已在" + endType.name() + "端登录")
//                        .positiveText(R.string.confirm)
//                        .onPositive(new MaterialDialog.SingleButtonCallback() {
//                            @Override
//                            public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
//                                callback.exit();
//                            }
//                        })
//                        .show();
//                */
//            }
//        });
//        LiveSDKWithUI.setRoomExitListener(new LiveSDKWithUI.LPRoomExitListener() {
//            @Override
//            public void onRoomExit(Context context, final LiveSDKWithUI.LPRoomExitCallback lpRoomExitCallback) {
//                //退出直播间二次确认回调 无二次确认无需设置
//                lpRoomExitCallback.exit();
//                /*
//                new MaterialDialog.Builder(context)
//                        .content("您确定要离开房间吗?")
//                        .positiveText("离开")
//                        .positiveColor(color)
//                        .negativeColor(color)
//                        .negativeText("取消")
//                        .onPositive(new MaterialDialog.SingleButtonCallback() {
//                            @Override
//                            public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
//                                dialog.dismiss();
//                                lpRoomExitCallback.exit();
//                            }
//                        })
//                        .onNegative(new MaterialDialog.SingleButtonCallback() {
//                            @Override
//                            public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
//                                dialog.dismiss();
//                                lpRoomExitCallback.cancel();
//                            }
//                        }).show();
//                        */
//            }
//        });
//    }

}
